package com.whfc.ms.api.emp.service;

import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.emp.dto.AppEmpCertDTO;
import com.whfc.emp.dto.AppEmpDTO;
import com.whfc.emp.dto.AppEmpNumDTO;
import com.whfc.emp.param.*;
import com.whfc.entity.dto.OssPathDTO;
import com.whfc.fuum.entity.SysUser;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @ClasssName MsAppEmpService
 * @Description 人员管理
 * @Author hw
 * @Date 2020/12/28 17:39
 * @Version 1.0
 */
public interface MsAppEmpService {

    /**
     * 人员列表
     *
     * @param request
     * @return
     */
    PageData<AppEmpDTO> list(AppEmpListParam request);

    /**
     * 人员列表（不分页）
     *
     * @param deptId
     * @param empName
     * @return
     */
    ListData<AppEmpDTO> list(Integer deptId, String empName);

    /**
     * 人员统计
     *
     * @param request
     * @return
     */
    AppEmpNumDTO num(AppEmpListParam request);

    /**
     * 导出人员列表
     *
     * @param param
     * @return
     * @throws Exception
     */
    OssPathDTO export(AppEmpListExportParam param) throws Exception;

    /**
     * 查看人员详情
     *
     * @param empId
     * @return
     */
    AppEmpDTO detail(Integer empId);

    /**
     * 获取人员信息
     *
     * @param empId 人员ID
     * @return AppEmpDTO
     */
    AppEmpDTO getEmpInfo(Integer empId);

    /**
     * 获取人员二维码地址
     *
     * @param empId
     * @return
     */
    OssPathDTO getEmpQr(Integer empId) throws Exception;

    /**
     * 人员管理-添加人员
     *
     * @param request
     */
    void add(AppEmpAddParam request);

    /**
     * 人员管理-编辑人员
     *
     * @param request
     */
    void edit(AppEmpEditParam request);

    /**
     * 人员管理-删除人员
     *
     * @param empId
     */
    void del(Integer empId);

    /**
     * 人员管理-上传图片
     *
     * @param base64Str
     * @param file
     * @param faceFlag
     * @return
     * @throws IOException
     */
    String uploadImg(String base64Str, MultipartFile file, Boolean faceFlag) throws IOException;

    /**
     * 人员管理-人员入职
     *
     * @param request
     */
    void enter(AppEmpEnterParam request);

    /**
     * 人员管理-人员离职
     *
     * @param request
     */
    void outer(AppEmpOuterParam request);

    /**
     * 人员管理-人员离职(批量)
     * @param request
     */
    void outer(AppEmpOuterBatchParam request);

    /**
     * 人员管理-人员绑定安全帽
     *
     * @param user
     * @param request
     */
    void bind(SysUser user, AppEmpDeviceBindParam request);

    /**
     * 人员管理-人员解除绑定安全帽
     *
     * @param user
     * @param request
     */
    void unbind(SysUser user, AppEmpDeviceUnbindParam request);

    /**
     * 人员证书列表
     *
     * @param empId
     * @return
     */
    ListData<AppEmpCertDTO> certList(Integer empId);

    /**
     * 上传人员证书附件
     *
     * @param base64Str
     * @param file
     * @return
     * @throws Exception
     */
    OssPathDTO uploadCertFile(String base64Str, MultipartFile file) throws Exception;

    /**
     * 删除人员证书
     *
     * @param certId
     */
    void delCert(Integer certId);

    /**
     * 添加证书
     *
     * @param request
     */
    void addCert(AppEmpCertAddParam request);

    /**
     * 编辑证书
     *
     * @param request
     */
    void editCert(AppEmpCertEditParam request);

    /**
     * 上传签名图片
     *
     * @param signImg 签名图片 Base64Str
     * @param id      对象ID
     * @param type    类型： train_emp-培训人员   confess-安全交底  risk-风险告知书
     * @param empId   人员ID
     */
    void uploadSignImg(String signImg, Integer id, String type, Integer empId);

    /**
     * 图片上传
     *
     * @param file   图片文件
     * @param module 模块
     * @return 图片地址
     */
    OssPathDTO uploadImg(MultipartFile file, String module);

    /**
     * 导入人员信息
     *
     * @param deptId
     * @param file
     */
    void importEmp(Integer deptId, MultipartFile file);

    void delList(List<Integer> empIdList);

    boolean checkVideoHelmet(SysUser user, String sn);

    void syncWorker(AppEmpEditParam request);

    List<AppEmpDTO> getLeaderList(Integer deptId, String keyword);
}
